"""
LeetCode 热题

给定一个字符串 s ，请你找出其中不含有重复字符的 最长 子串 的长度。
"""

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        找出字符串中最长不含重复字符的子串长度。

        参数:
        s (str): 输入的字符串

        返回:
        int: 最长不含重复字符的子串长度
        """
        # 字典用于存储字符及其最新索引
        char_index_map = {}
        # 初始化最长子串长度和当前子串的起始索引
        max_length = 0
        start = 0

        # 遍历字符串中的每个字符
        for i, char in enumerate(s):
            # 如果字符已经在字典中且索引大于等于当前子串的起始索引
            if char in char_index_map and char_index_map[char] >= start:
                # 更新当前子串的起始索引为重复字符的下一个位置
                start = char_index_map[char] + 1
            else:
                # 更新最长子串长度
                max_length = max(max_length, i - start + 1)
            # 更新字符的最新索引
            char_index_map[char] = i

        # 返回最长不含重复字符的子串长度
        return max_length

if __name__ == '__main__':
    a = Solution()
    print(a.lengthOfLongestSubstring("abcabcbb"))  # 输出: 3





